package com.jacobson.core.framework

import android.app.Application
import android.content.Context
import androidx.fragment.app.FragmentManager
import com.jacobson.core.App
import com.jacobson.core.base.delegate.AppLifecycle
import com.jacobson.core.di.components.AppComponent
import com.jacobson.core.di.modules.GlobalConfigurationModule

/**
 * ================================================
 * 应用继承该接口，给框架注入配置，需要***androidManifest***中使用<meta>标签声明该实现类
 * @author Wucz on 2018/7/18 14:26
 * ================================================
 */

interface AppConfiguration {
    /**
     * 使用[GlobalConfigurationModule]给框架配置一些配置参数
     *
     */
    fun applyOptions(context: Context, builder: GlobalConfigurationModule.Builder)

    /**
     * 使用[AppLifecycle]在Application的生命周期中注入一些操作
     *
     */
    fun injectAppLifecycle(context: Context, lifecycleList: MutableList<AppLifecycle>)

    /**
     * 使用[Application.ActivityLifecycleCallbacks]在Activity的生命周期中注入一些操作
     *
     */
    fun injectActivityLifecycle(context: Context, lifecycleList: MutableList<Application.ActivityLifecycleCallbacks>)

    /**
     * 使用[FragmentManager.FragmentLifecycleCallbacks]在Fragment的生命周期中注入一些操作
     */
    fun injectFragmentLifecycle(context: Context, lifecycleList: MutableList<FragmentManager.FragmentLifecycleCallbacks>)

    /**
     * appComponent之后inject调用一次
     */
    fun inject(context: Context, app: App, appComponent: AppComponent)
}